from django.conf import settings
from django.contrib.auth.models import AbstractUser
from django.db import models

# Django 项目中有用户模型类 但没有用户的手机号等其他字段 所以通过继承 添加额外字段 继承方法


# 定义用户模型类 添加额外字段 AbstractUser 是django 的类 有好多 字段
from itsdangerous import TimedJSONWebSignatureSerializer


class User(AbstractUser):
    ''' 新增一个手机号的字段 '''   # unique=True 唯一
    mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号')

    # 新增一个验证邮箱的字段
    email_active = models.BooleanField(default=False, verbose_name='邮箱验证状态')

    class Meta:
        db_table = 'tb_users'  # 重写表名
        verbose_name = '用户'
        verbose_name_plural = verbose_name  # verbose_name_plural 管理后台英文显示中文

    def generate_verify_email_url(self):
        ''' 生成激活邮箱的url'''

        # 使用itdangerous 保证接口安全
        serializer = TimedJSONWebSignatureSerializer(settings.SECRET_KEY, expires_in=60*60*24)  # 有效期1天

        data = {'user_id': self.id, 'email': self.email}

        token = serializer.dumps(data).decode()

        # 拼接激活邮箱地址
        verify_url = 'http://www.meiduo.site:8080/success_verify_email.html?token=' + token

        return verify_url
